home *** CD-ROM | disk | FTP | other *** search
/ User's Choice Windows CD / User's Choice Windows CD (CMS Software)(1993).iso / utility1 / mew11.zip / MDI.CMD < prev    next >
OS/2 REXX Batch file  |  1992-10-13  |  4KB  |  130 lines

  1. ; Screen juggling macros for MicroEMACS 3.11c for Windows
  2. ;
  3. ; Pierre Perret - October 1992
  4.  
  5. rename-screen $cbufname
  6. restore-screen
  7. set %scrwidth 80    ; 75 is more appropriate for 640x480
  8. %scrwidth  change-screen-width
  9.  
  10. set %filename ""
  11. set %dropbuf "Dropped files"    ; special buffer used for drag'n drop
  12. set %altbname 0     ; used to supply a replacement buffer name if duplicate
  13.  
  14. store-procedure open-file
  15. ; Reads files in separate screens, thus allowing efficient use of
  16. ; the MDI feature
  17.     set %prevscr $scrname
  18.     set %prevbuf $cbufname
  19.     find-screen "Relay screen"
  20.     select-buffer %prevbuf  ; to make sure we have the right working dir
  21.     delete-other-windows
  22.     !if &seq %filename ""
  23.         !force execute-named-command find-file
  24.     !else
  25.         !force find-file %filename &cat "*" %altbname
  26.         ; the second argument is there to supply an alternate buffer name
  27.     !endif
  28.     !if $status
  29. *FileFound
  30.         !if &seq $cbufname &cat "*" %altbname
  31.             set %altbname &add %altbname 1  ; need a new one for next time...
  32.         !endif
  33.         set %tmp $cbufname
  34.         set $scrname %tmp   ; switches screens only if named one exists
  35.         !if &seq $scrname %tmp
  36.             ; that screen already exists (we are now in it)
  37.             set $curwind 1
  38.             !while ¬ &seq $cbufname %tmp
  39.                 !if &equ $numwind $curwind
  40.                     ; we cannot find the desired buffer in any window!
  41.                     set $scrname "Relay screen"
  42.                     set %tmp &cat %tmp "."
  43.                     !force rename-screen %tmp
  44.                     !while ¬ $status
  45.                         set %tmp &cat %tmp "."
  46.                         !force rename-screen %tmp
  47.                     !endwhile
  48.                     clear-message-line
  49.                     !return
  50.                 !endif
  51.                 next-window
  52.             !endwhile
  53.             ; we found the right window within the existing screen
  54.             !force delete-screen "Relay screen"
  55.         !else
  56.             ; that screen does not exist yet
  57.             rename-screen $cbufname
  58.             %scrwidth change-screen-width
  59.         !endif
  60.     !else
  61.         ; find-file failed
  62.         !if &seq $cbufname %prevbuf
  63.             ; buf name did not change ==> file-find was canceled
  64.             find-screen %prevscr
  65.             !force delete-screen "Relay screen"
  66.         !else
  67.             ; buf name changed ==> it is a new file
  68.             !goto FileFound
  69.         !endif
  70.     !endif
  71.     set %filename ""
  72. !endm
  73. macro-to-key    open-file   ^X^F
  74. unbind-menu     ">&File>&Open..."
  75. macro-to-menu   open-file   "&Open...@0"
  76.  
  77. store-procedure rebuild-screens
  78. ; makes sure there is one screen per visible buffer
  79. ; does not affect screens whose name do not match an existing buffer
  80.     find-screen "Relay screen"
  81.     select-buffer "Relay screen"
  82.     delete-other-windows
  83.     minimize-screen
  84.     !goto BufLoop
  85.     !while ¬ &seq $cbufname "Relay screen"
  86. *BufLoop
  87.         find-screen "Relay screen"
  88.         next-buffer
  89.         !if ¬ &sin "Relay screenBinding listFunction listVariable list" $cbufname
  90.             find-screen $cbufname
  91.             select-buffer $scrname
  92.             delete-other-windows
  93.             restore-screen
  94.         !endif
  95.     !endwhile
  96.     cascade-screens
  97.     !if &seq $scrname "Relay screen"
  98.         cycle-screens
  99.     !endif
  100.     !force delete-screen "Relay screen"
  101. !endm
  102. macro-to-menu   rebuild-screens ">S&creen>&Rebuild@0"
  103.  
  104. store-procedure kill-screen
  105.     set %prevscr $scrname
  106.     set %prevbuf $cbufname
  107.     cycle-screens
  108.     !force delete-screen %prevscr
  109.     !if $status
  110.         !force delete-buffer %prevbuf
  111.     !endif
  112. !endm
  113. macro-to-key    kill-screen A-K
  114. macro-to-menu   kill-screen     ">S&creen>&Kill@6"
  115.  
  116. store-procedure drop-files
  117.     ; note that we pay no attention to the location of the drop
  118.     set %prevbuf $cbufname
  119.     select-buffer %dropbuf
  120.     goto-line 2
  121.     select-buffer %prevbuf
  122.     set %filename #%dropbuf
  123.     !while ¬ &seq %filename %dropbuf
  124.         run open-file
  125.         set %filename #%dropbuf
  126.     !endwhile
  127.     set %filename ""
  128. !endm
  129. macro-to-key    drop-files  MS!
  130.